package ast;

import java.util.ArrayList;

import logic.Constantes;

public class Program  {

	/**
	 * ATTRIBUTES
	 */
	// lista de las funciones del programa
	private ArrayList<Function> _Functions = new ArrayList<Function>();
	
	/**
	 * Agregar nuevas funciones
	 * @param pFunction
	 */
	public void addFunction( Function pFunction ){
		_Functions.add(pFunction);
	}
	
	/**
	 * Gets
	 */
	public ArrayList<Function> get_Functions() {
		return _Functions;
	}

	/**
	 * Sets
	 */
	public void set_Functions(ArrayList<Function> _Functions) {
		this._Functions = _Functions;
	}
	
	/**
	 * Codigo asociado a esta expresion
	 */
	public String GenerarCodigo( ArrayList<int[]> pConfiguraciones) {
		// definir el flujo
		String code = new String();
		code += ConstCode.INI_FLUJO;
		// setup
		code += ConstCode.SETUP_FUNCTION;
		if( pConfiguraciones != null){
		for( int cnt = 0; cnt < pConfiguraciones.size(); cnt++ ){
			if( pConfiguraciones.get(cnt)[0] == Constantes.ID_LED){
				code += ConstCode.PINMODE + String.valueOf(pConfiguraciones.get(cnt)[1]) + ConstCode.PINMODE_FIN;
			}
		}
		}
		code += ConstCode.END_CORCHET;
		// escribir en 7 segmentos
		code += ConstCode.WRITE_NUM_FUNCTION;
		// loop 
		code += ConstCode.LOOP;
		// todas las funciones
		for(int cnt=0; cnt<get_Functions().size(); cnt++){
			code += "void " + get_Functions().get(cnt).GenerarCodigo();
		}
		return code;
	}
}
